/**
  ******************************************************************************
  * @file    main.c 
  * @author  18408107475@163.com
  * @version v1.2
  * @date    2025-05-06
  * @brief   BKP（后备寄存器）读写测试
  * @details 
  * 硬件配置：
  * - STM32F10x系列（VBAT需连接电池，否则掉电后BKP数据丢失）
  * 
  * 软件特性：
  * 1. 测试后备寄存器（BKP_DR1/BKP_DR2）的读写功能
  * 2. 通过串口打印写入和读取的值
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"          // STM32标准外设库（V3.5.0）
#include "Delay.h"              // 精确延时库（基于SysTick）
#include "USART1_Config.h"      // 调试串口配置（PA9/PA10）

/* 变量定义 ------------------------------------------------------------------*/
uint16_t ArrayWrite[2] = {0x0000, 0xAAAA};  // 待写入BKP的数据
uint16_t ArrayRead[2];                      // 从BKP读取的数据

/* 主程序 --------------------------------------------------------------------*/
int main(void)
{
    /* 硬件初始化 */
    USART1_Config(115200);      // 初始化调试串口（115200bps）

    // 使能PWR和BKP时钟，并解锁后备寄存器访问
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
    PWR_BackupAccessCmd(ENABLE);

    while(1)
    {
        /* 写入BKP寄存器 */
        BKP_WriteBackupRegister(BKP_DR1, ArrayWrite[0]);  // 写入DR1
        BKP_WriteBackupRegister(BKP_DR2, ArrayWrite[1]);  // 写入DR2

        /* 自增测试数据 */
        ArrayWrite[0]++;
        ArrayWrite[1]++;

        /* 延时1秒 */
        Delay_s(1);

        /* 从BKP读取数据 */
        ArrayRead[0] = BKP_ReadBackupRegister(BKP_DR1);
        ArrayRead[1] = BKP_ReadBackupRegister(BKP_DR2);

        /* 通过串口打印结果 */
        USART1_Printf("Write to BKP: 0x%04X, 0x%04X\r\n", ArrayWrite[0]-1, ArrayWrite[1]-1);
		USART1_Printf("Read from BKP: 0x%04X, 0x%04X\r\n\r\n", ArrayRead[0], ArrayRead[1]);
    }
}
